/**
 * 将一个异步函数或者API进行Promise化
 * p=fn(api)=>p(...).then(data=>{})
 * 核心就是高阶函数
 * 踩坑：
 * node的fs模块Api方法readFile读取本地文件如果不是vs打开的文件夹的一级目录，通过vscode 的插件node code执行
 * 这时候会抛出异常，要通过这个node code 执行文件成功需要将执行文件所依赖的文件放在打开的文件夹的一级。
 *
 */

//将fs进行Promise化
const fs = require("fs");
// fs.readFile进行包装
function promisify(fn) {
  return (...args) => {
    return new Promise((resolve, reject) => {
      fn(...args, (err, data) => {
        if (err) reject(err);
        resolve(data);
      });
    });
  };
}
//所有的都进行Promise化
function promisifyAll(target) {
  Reflect.ownKeys(target).forEach((keys) => {
    if (typeof keys === "function") {
      target[`${keys}Async`] = promisify(target[keys]);
    }
  });
}

const readFiles = promisify(fs.readFile);
readFiles("name.md", "utf8").then((data) => {
  console.log(data);
});
